import { useBaseStore } from '@/stores/useBaseStore.js'
import router from '@/router/index.js'
let baseStore = null
const authObj = {
  find: 1,
  add: 2,
  update: 4,
  delete: 8,
}

export default {
  // 开发按钮级别权限
  // 指令绑定得元素，在页面中完成挂载后执行得指令函数
  mounted(el, binding) {
    // 获取当前用户访问对应页面时，该用户对当前页面得 增删改查 得权限
    //    => 因为当前项目得权限在登录时，会存储到中央仓库中，所以通过中央仓库可以直接获取所有导航得权限
    if (baseStore == null) {
      baseStore = useBaseStore()
    }
    // console.log(baseStore.menus)
    //    => 通过激活路由信息(正在展示得页面组件)，获取到路由地址，通过地址在 menus 查找对应得权限
    // console.log(router) // 路由对象，提供得时路由得方法
    // console.log(router.currentRoute) // 激活路由信息对象
    let path = router.currentRoute.value.path // 当前访问路由得地址
    // console.log(path)
    //   => 从baseStore.menus 筛选出 path 对应得导航对象，该对象中包含 按钮权限
    let arr = baseStore.menus.filter(function (item) {
      return item.right_path == path
    })
    // 保证代码运行安全得判断，防止因为以外导致数组没有值，程序运行崩溃
    if (arr.length == 0) {
      return
    }
    // 通过权限判断，描述当前使用该指令得标签是否能在页面中展示
    // console.log(binding.value)
    let count = 0 // 0000
    for (let item of binding.value) {
      count += authObj[item] // 将指令传递得权限关键字转换为对应得数值并进行求和
    }

    // console.log('当前导航权限:', arr[0].right_function)
    // console.log('当前需要判断权限:', count)

    if ((arr[0].right_function & count) === 0) {
      let parentNode = el.parentNode
      if (parentNode == null) {
        el.style.display = 'none'
        return
      }
      parentNode.removeChild(el)
    }
  },
}
